﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;

namespace Formation_Entreprise
{
    /// <summary>
    /// La classe AccesTableConseiller contient toutes les méthodes
    /// d'accès pour la table conseiller
    /// </summary>
    class AccesTableConseiller
    {
        //*********************//
        //Ajouter un conseiller//
        //*********************//
        public static int AjouterConseiller(objConseiller conseiller)
        {
            //requete à utiliser avec les données donnés en params
            string query = "INSERT INTO [Conseiller] ([Nom],[Titre],[Adresse],[poste],[NoBureau],[TelBureau],[TelResidence],[Fax],[DateEmbauche],[Actif]) VALUES (@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10)";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //paramètres de la requete
            oledbcmd.Parameters.AddWithValue("@p1", conseiller.Nom);
            oledbcmd.Parameters.AddWithValue("@p2", conseiller.Titre);
            oledbcmd.Parameters.AddWithValue("@p3", conseiller.Adresse);
            oledbcmd.Parameters.AddWithValue("@p4", conseiller.Poste);
            oledbcmd.Parameters.AddWithValue("@p5", conseiller.NoBureau);
            oledbcmd.Parameters.AddWithValue("@p6", conseiller.TelBureau);
            oledbcmd.Parameters.AddWithValue("@p7", conseiller.TelResidence);
            oledbcmd.Parameters.AddWithValue("@p8", conseiller.Fax);
            oledbcmd.Parameters.AddWithValue("@p9", conseiller.DateEmbauche);
            oledbcmd.Parameters.AddWithValue("@p10", conseiller.Actif);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, Ajout du conseiller          
                nbLignes = oledbcmd.ExecuteNonQuery();
            }

            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //**********************//
        //Modifier un conseiller//
        //**********************//
        public static int ModifierConseiller(objConseiller conseiller)
        {
            //requete à utiliser avec les données donnés en params
            string query = "UPDATE [Conseiller] SET [Titre]=?, [Adresse]=?, [Poste]=?, [NoBureau]=?, [TelBureau]=?, [TelResidence]=?, [Fax]=?, [DateEmbauche]=?, [Actif]=? WHERE [Nom]=?";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //paramètres de la requete          
            oledbcmd.Parameters.AddWithValue("@Titre", conseiller.Titre);
            oledbcmd.Parameters.AddWithValue("@Adresse", conseiller.Adresse);
            oledbcmd.Parameters.AddWithValue("@Poste", conseiller.Poste);
            oledbcmd.Parameters.AddWithValue("@NoBureau", conseiller.NoBureau);
            oledbcmd.Parameters.AddWithValue("@TelBureau", conseiller.TelBureau);
            oledbcmd.Parameters.AddWithValue("@TelResidence", conseiller.TelResidence);
            oledbcmd.Parameters.AddWithValue("@Fax", conseiller.Fax);
            oledbcmd.Parameters.AddWithValue("@DateEmbauche", conseiller.DateEmbauche);
            oledbcmd.Parameters.AddWithValue("@Actif", conseiller.Actif);
            oledbcmd.Parameters.AddWithValue("@Nom", conseiller.Nom);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, Modification du conseiller            
                nbLignes = oledbcmd.ExecuteNonQuery();
            }

            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //**********************//
        //Suprimer un conseiller//
        //**********************//
        public static int SuprimerConseiller(string nomConseiller)
        {
            //requete à utiliser avec les données donnés en params
            string query = "DELETE FROM Conseiller WHERE Nom LIKE @p1";

            //connection à la base de donnée et associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //paramètres de la requete
            oledbcmd.Parameters.AddWithValue("@p1", nomConseiller);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, supression du conseiller
                nbLignes = oledbcmd.ExecuteNonQuery();
            }

            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //*********************************//
        //Liste tous les conseillers actifs//
        //*********************************//
        public static List<objConseiller> ListerConseillersActif()
        {
            //requete à utiliser
            string query = "SELECT Nom FROM Conseiller WHERE Actif = -1";

            //connection à la base de donnée et associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //initialiser le reader
            OleDbDataReader reader = null;

            // Création de la liste de retour listConseiller
            List<objConseiller> listConseiller = new List<objConseiller> { };
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete
                reader = oledbcmd.ExecuteReader(); 
        
                //mettre chaque conseillers dans un objet conseiller
                while (reader.Read())
                {
                    // Création d'un objet Conseiller afin d'ajouter à
                    // la liste de retour (listConseiller)
                    objConseiller c = new objConseiller((string)reader["Nom"]);
                    listConseiller.Add(c);
                }
            }
            catch (OleDbException ex) { throw ex; }

            //fermeture du reader et de la conection à la base de donnée
            reader.Close();
            oledbcn.Close();

            // Tri de la liste (listConseiller) et retour de celle-ci
            listConseiller.Sort((x, y) => string.Compare(x.Nom, y.Nom));
            return listConseiller;
        }


        //*******************************//
        //Obtenir le numéro du conseiller//
        //*******************************//
        public static int ObtenirNumeroConseiller(string conseiller)
        {
            int numero = 0;

            // Définition de la requête, de la connection à la base 
            // de données & Association de la requête avec la connection
            string query = "SELECT NoConseiller FROM Conseiller WHERE Nom = @p1";
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection(); ;
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //Parametre de la requete
            oledbcmd.Parameters.AddWithValue("@p1", conseiller);

            //initialiser le reader
            OleDbDataReader reader = null;
            try
            {
                // Ouverture de la connection & Exécution de la requête
                oledbcn.Open();
                reader = oledbcmd.ExecuteReader();

                // Retour du numéro du conseiller
                if (reader.Read())
                {
                    numero = (int)reader["NoConseiller"];
                }
            }
            catch (OleDbException ex) { throw ex; }

            // Fermeture de la connection à la base de données
            // et fermeture du reader
            oledbcn.Close();
            reader.Close();

            // Retour du numéro
            return numero;
        }


        //*******************************//
        //Obtenir le nom du conseiller//
        //*******************************//
        public static string ObtenirNomConseiller(int num)
        {
            string nom = string.Empty;

            // Définition de la requête, de la connection à la base 
            // de données & Association de la requête avec la connection
            string query = "SELECT Nom FROM Conseiller WHERE NoConseiller = @p1";
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //Parametre de la requete
            oledbcmd.Parameters.AddWithValue("@p1", num);

            //initialiser le reader
            OleDbDataReader reader = null;
            try
            {
                // Ouverture de la connection & Exécution de la requête
                oledbcn.Open();
                reader = oledbcmd.ExecuteReader();

                // Retour du nom du conseiller
                if (reader.Read())
                {
                    nom = (string)reader["Nom"];
                }
            }
            catch (OleDbException ex) { throw ex; }

            // Fermeture de la connection à la base de données
            // et fermeture du reader
            oledbcn.Close();
            reader.Close();

            // Retour du nom
            return nom;
        }
    }
}
